﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using Siderys.Blog.Search.Engine.WebService;
using Siderys.Blog.Search.Engine.Resultado;
using System.Collections.ObjectModel;
namespace Siderys.Blog.Search.UI.WPF
{
	/// <summary>
	/// Interaction logic for Window1.xaml
	/// </summary>
	public partial class Window1 : Window
	{
        ConsultaWebServices lBusqueda = null;
        int lResultIndex = 0;

		public Window1()
		{
			this.InitializeComponent();
			
			// Insert code required on object creation below this point.
            lBusqueda = new ConsultaWebServices();
            CargarAmbitos();
		}

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            if (this.txtSearch.Text.Trim().Equals(string.Empty))
            {
                this.txtError.Text = "Debe ingresar un texto para la búsqueda";
                this.txtError.Visibility = Visibility.Visible;
                this.scrResults.Visibility = Visibility.Hidden;
            }
            else
            {
                if (cboAmbito.SelectedIndex != -1)
                {
                    List<ObjetoResultado> lResultado = lBusqueda.GetResultadoConsulta(txtSearch.Text, ((AmbitoBusqueda)cboAmbito.SelectedItem).Nombre);
                    //List<ObjetoResultado> lResultado = lBusqueda.GetDatosDePrueba();
                    if (lResultado != null && lResultado.Count > 0)
                    {
                        ArmarResultado(lResultado);
                        this.txtError.Visibility = Visibility.Hidden;
                        this.scrResults.Visibility = Visibility.Visible;
                    }
                    else
                    {
                        this.txtError.Text = "No hay resultados para el texto buscado.";
                        this.txtError.Visibility = Visibility.Visible;
                        this.scrResults.Visibility = Visibility.Hidden;
                    }
                }
                else
                {
                    this.txtError.Text = "Debe Seleccionar un ámbito de búsqueda";
                    this.txtError.Visibility = Visibility.Visible;
                    this.scrResults.Visibility = Visibility.Hidden;
                }
            }
        }
        private void CargarAmbitos()
        {
            List<AmbitoBusqueda> lAmbitos = lBusqueda.GetMetadataBusqueda();            
            foreach (AmbitoBusqueda lAmbito in lAmbitos)
            {
                cboAmbito.Items.Add(lAmbito);
            }
            cboAmbito.SelectedIndex = 0;
        }
        private void ArmarResultado(List<ObjetoResultado> pResultado)
        {
            this.stpResults.Children.Clear();
            lResultIndex = 0;
            this.scrResults.ScrollToHome();
            foreach (ObjetoResultado lObjResultado in pResultado)
            {
                ResultItem lItem = new ResultItem();
                lItem.Title = lObjResultado.Title;
                lItem.Path = lObjResultado.Path;
                lItem.ShowCompleted += new RoutedEventHandler(lItem_ShowCompleted);
                this.stpResults.Children.Add(lItem);
            }
            this.ShowNextResult();
        }

        private void ShowNextResult()
        {
            if (lResultIndex < this.stpResults.Children.Count)
            {
                ((ResultItem)this.stpResults.Children[lResultIndex]).Show();
                lResultIndex++;
            }
        }

        void lItem_ShowCompleted(object sender, RoutedEventArgs e)
        {
            this.ShowNextResult();
        }
	}
}